package org.example.afree;

//二进制求和
public class Binary_summation {
    public String addBinary(String a, String b) {
        StringBuilder ab = new StringBuilder(a);
        StringBuilder bb = new StringBuilder(b);
        if (ab.length() < bb.length()){
            StringBuilder tem = ab;
            ab = bb;
            bb = tem;
        }
        return add(ab.reverse(),bb.reverse(),0,0);
    }

    public String add(StringBuilder ab,StringBuilder bb,int index ,int n){
        if (index >= bb.length()){
            if (n == 1){
                while(index < ab.length() && ab.charAt(index)=='1'){
                    ab.setCharAt(index,'0');
                    index++;
                }
                if (index >= ab.length()){
                    ab.append(1);
                }else {
                    ab.setCharAt(index, '1');
                }
            }
            return ab.reverse().toString();
        }
        int a = Integer.parseInt(String.valueOf(ab.charAt(index)));
        int b = Integer.parseInt(String.valueOf(bb.charAt(index)));
        int sum = a + b + n;
        if (sum==0){
            ab.setCharAt(index,'0');
            return add(ab,bb,index+1,0);
        } else if (sum==1){
            ab.setCharAt(index,'1');
            return add(ab,bb,index+1,0);
        } else if (sum == 2) {
            ab.setCharAt(index,'0');
            return add(ab,bb,index+1,1);
        }else {
            ab.setCharAt(index,'1');
            return add(ab,bb,index+1,1);
        }
    }

//    public int add(String a){
//        int sum = 0;
//        int index = 0;
//        for (int i = a.length()-1; i >= 0; i--) {
//            char c = a.charAt(i);
//            int num = Integer.parseInt(String.valueOf(c));
//            sum+=num * Math.pow(2,index);
//            index++;
//        }
//        return sum;
//    }

}
